#include <stdio.h>
#include <omp.h>

// span_apply 函数
void span_apply(double A[128][128]) {
    // 使用 OpenMP 并行化两层嵌套循环
    #pragma omp parallel for collapse(2)
    for (int i = 0; i < 128; ++i) {
        // 使用 GCC 编译器进行循环展开
        #pragma GCC unroll 16
        for (int j = 0; j < 128; ++j) {
            A[i][j] = A[i][j] + 1;
        }
    }
}

int main() {
    double A[128][128];

    // 初始化数组元素为 0
    for (int i = 0; i < 128; ++i) {
        for (int j = 0; j < 128; ++j) {
            A[i][j] = 0;
        }
    }

    // 调用 span_apply 函数
    span_apply(A);

    // 输出部分元素来验证结果
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 3; ++j) {
            printf("A[%d][%d] = %.2f\n", i, j, A[i][j]);
        }
    }

    return 0;
}    